package com.anolesoft.yr.mbus.part.service.impl;

import com.anolesoft.yr.mbus.part.dto.PartBomDTO;
import com.anolesoft.yr.mbus.part.entity.PartBomDO;
import com.anolesoft.yr.mbus.part.mapper.PartBomMapper;
import com.anolesoft.yr.mbus.part.service.PartBomService;
import com.anolesoft.yr.util.CustomBeanUtils;
import com.anolesoft.yr.util.PageData;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

/**
 * @author zhj
 * @date 2020/8/17 9:01
 */
@Service("partBomServiceImpl")
@Deprecated
public class PartBomServiceImpl implements PartBomService {
    @Autowired
    private PartBomMapper partBomMapper;
    @Transactional
    @Override
    public int create(PartBomDTO partBomDTO) {
        return partBomMapper.insert(PartBomDO.builder()
                .objuid(partBomDTO.getObjuid())
                .partModelUid(partBomDTO.getPartModelUid())
                .parentPartModelUid(partBomDTO.getParentPartModelUid())
                .factoryCode(partBomDTO.getFactoryCode())
                .remark(partBomDTO.getRemark())
                .quantity(partBomDTO.getQuantity())
                .modifyUserUid(partBomDTO.getModifyUserUid())
                .modifyTime(partBomDTO.getModifyTime())
                .deleteFlag(partBomDTO.getDeleteFlag())
                .createUserUid(partBomDTO.getCreateUserUid())
                .createTime(partBomDTO.getCreateTime())
                .build());
    }

    @Transactional
    @Override
    public int modify(PartBomDTO partBomDTO) {
//        if(1==1){
//            throw new ServiceException("aaa");
//        }
        PartBomDO partBomDO = partBomMapper.selectOneById(partBomDTO.getObjuid());
        if (partBomDO == null) {
            partBomDO = PartBomDO.builder().build();
        }else{
            partBomDO.setObjuid(partBomDTO.getObjuid());
            partBomDO.setPartModelUid(partBomDTO.getPartModelUid());
            partBomDO.setParentPartModelUid(partBomDTO.getParentPartModelUid());
            partBomDO.setFactoryCode(partBomDTO.getFactoryCode());
            partBomDO.setRemark(partBomDTO.getRemark());
            partBomDO.setQuantity(partBomDTO.getQuantity());
            partBomDO.setModifyUserUid(partBomDTO.getModifyUserUid());
            partBomDO.setModifyTime(partBomDTO.getModifyTime());
            partBomDO.setDeleteFlag(partBomDTO.getDeleteFlag());
            partBomDO.setCreateUserUid(partBomDTO.getCreateUserUid());
            partBomDO.setCreateTime(partBomDTO.getCreateTime());
        }

        return partBomMapper.update(partBomDO);
    }

    @Transactional
    @Override
    public int remove(String id) {
        return partBomMapper.delete(id);
    }

    @Override
    public List<PartBomDTO> selectAll() {
        return partBomMapper.selectAll().stream().map(t-> CustomBeanUtils.partBomDO2DTO(t)).collect(Collectors.toList());
    }

    @Override
    public PageData<List<PartBomDTO>> selectAll(Integer limit, Integer curr) {
        Page<PartBomDO> page = new Page<>(curr, limit);
        List<PartBomDTO> partBomDTOS = partBomMapper.selectPageAll(page).stream().map(t -> CustomBeanUtils.partBomDO2DTO(t)).collect(Collectors.toList());
        return new PageData<>((int)page.getTotal(), partBomDTOS);
    }

    @Override
    public Optional<PartBomDTO> selectOneById(String id) {
        PartBomDO partBomDO = partBomMapper.selectOneById(id);
        if (partBomDO != null) {
            return Optional.of(CustomBeanUtils.partBomDO2DTO(partBomDO));
        }
        return Optional.empty();
    }

    @Override
    public List<PartBomDTO> selectList(PartBomDTO partBomDTO) {
        PartBomDO partBomDO = buildCondition(partBomDTO);
        return partBomMapper.selectList(partBomDO).stream().map(t -> CustomBeanUtils.partBomDO2DTO(t)).collect(Collectors.toList());
    }

    private PartBomDO buildCondition(PartBomDTO partBomDTO) {
        return PartBomDO.builder()
                .factoryCode(partBomDTO.getFactoryCode())
                .parentPartModelUid(partBomDTO.getParentPartModelUid())
                .partModelUid(partBomDTO.getPartModelUid())
                .objuid(partBomDTO.getObjuid())
                .build();
    }

    @Override
    public PageData<List<PartBomDTO>> selectList(PartBomDTO partBomDTO, Integer limit, Integer curr) {
        PartBomDO partModelDO = buildCondition(partBomDTO);
        Page<PartBomDO> page = new Page<>(curr,limit);
        List<PartBomDO> partBomDOS = partBomMapper.selectPageList(partModelDO, page);
        List<PartBomDTO> partBomlDTOs = partBomDOS.stream().map(t -> CustomBeanUtils.partBomDO2DTO(t)).collect(Collectors.toList());
        return new PageData<>(((int) page.getTotal()), partBomlDTOs);
    }
}
